home *** CD-ROM | disk | FTP | other *** search
/ Internet Publisher's Toolbox 2.0 / Internet Publisher's Toolbox.iso / java / applets / escher / generi~1.jav < prev    next >
Encoding:
Text File  |  1995-10-31  |  2.7 KB  |  163 lines

  1. import java.lang.*;
  2.  
  3. class generic_paint {
  4. boolean paint[];
  5. boolean painting=true;
  6. int width,height;
  7. public int lastx,lasty;
  8.  
  9.     generic_paint(int iwidth, int iheight){
  10.  
  11.         width=iwidth-1;
  12.         height=iheight-1;
  13.         paint = new boolean[(width+1)*(height+1)];      
  14.         lastx=-1;
  15.         lasty=-1;
  16.  
  17.         for(int i=0;i<(height+1);i++){
  18.         for(int j=0;j<(width+1);j++){
  19.             paint[(width+1)*i+j]=false;
  20.         }}
  21.     }
  22.     public boolean painted(int x,int y){
  23.         if(paint[y*(width+1)+x]){
  24.             return true;
  25.         } else {
  26.             return false;
  27.         }
  28.     }
  29.     private void paint(int x,int y){
  30.         if(x>=0 && y>=0 && x<=width && y <= height ){
  31.         paint[y*(width+1)+x]=painting;
  32.         }
  33.     }
  34.     public String string(){
  35.         String str ="";        
  36.         
  37.         int a=32,b=0; 
  38.         for(int j=0;j<=height;j++){
  39.         for(int i=0;i<=width;i++){
  40.             a=a/2; 
  41.             if(paint[(width+1)*j+i]){
  42.                 b=b+a;    
  43.             }
  44.             if(a==1){
  45.                 str=str+Integer.toString(b,32);
  46.                 a=32;
  47.                 b=0;
  48.             }
  49.         }}
  50.         return str;
  51.     }
  52.     public boolean cutted(){
  53.         if(lastx!=-1 && lasty!=-1){
  54.             return false;
  55.         } 
  56.         return true;
  57.     }
  58.     public void last(int x,int y){
  59.         lastx=x;
  60.         lasty=y;
  61.     }
  62.     public void cut(){
  63.         lastx=-1;
  64.         lasty=-1;
  65.     }
  66.     public void drawLine(int xFrom,int yFrom,int xTo,int yTo){
  67.       int dx, dy, inerE, inerNE, d,x,y;
  68.  
  69.           dx = xTo - xFrom;
  70.           dy = yTo - yFrom;
  71.  
  72.           if (((dx < 0 ) && (-dx > dy)) || ((dy < 0) && (-dy > dx))){
  73.             x = xFrom;
  74.             y = yFrom;
  75.             xFrom = xTo;
  76.             yFrom = yTo;
  77.             xTo = x;
  78.             yTo = y;
  79.             dy = - dy;
  80.             dx = - dx;
  81.         }
  82.         x = xFrom;
  83.         y = yFrom;
  84.  
  85.         paint(x,y);
  86.         //board[x][y] = POINT1;
  87.  
  88.         if (dx > dy){
  89.               if (dy < 0){
  90.             d = -2*dy- dx;
  91.             inerE  = -2*dy;
  92.             inerNE = 2*(-dy-dx);
  93.  
  94.             for(x = xFrom+1;x < xTo; x++){
  95.                 if (d <= 0) {
  96.                     d += inerE;
  97.                 } else {
  98.                     d += inerNE;
  99.                     y--;
  100.                 }
  101.                 paint(x,y);
  102.                 //board[x][y] = LINE;
  103.             }
  104.         } else {
  105.             d = 2*dy- dx;
  106.             inerE  = 2*dy;
  107.             inerNE = 2*(dy-dx);
  108.  
  109.             for(x = xFrom+1;x < xTo; x++){
  110.                 if (d <= 0){
  111.                     d += inerE;
  112.                 } else {
  113.                     d += inerNE;
  114.                     y++;
  115.                 }
  116.                 paint(x,y);
  117.                 //board[x][y] = LINE;
  118.             }
  119.         }
  120.             } else {
  121.         if (dx < 0) {
  122.             d = -2*dx- dy;
  123.             inerE  = -2*dx;
  124.             inerNE = 2*(-dx-dy);
  125.  
  126.             for(y = yFrom+1;y < yTo; y++){
  127.                 if (d <= 0) {
  128.                     d += inerE;
  129.                 } else {
  130.                     d += inerNE;
  131.                     x--;
  132.                 }
  133.                 paint(x,y);
  134.                 //board[x][y] = LINE;
  135.             }
  136.         } else {
  137.             d = 2*dx- dy;
  138.             inerE  = 2*dx;
  139.             inerNE = 2*(dx-dy);
  140.             for(y = yFrom+1;y < yTo; y++) {
  141.                 if (d <= 0) {
  142.                     d += inerE;
  143.                 } else {
  144.                     d += inerNE;
  145.                     x++;
  146.                 }
  147.                 paint(x,y);
  148.                 //board[x][y] = LINE;
  149.                     }
  150.             }
  151.             }
  152.  
  153.     } 
  154.     public void clear (){
  155.         for(int i=0;i<(height+1);i++){
  156.         for(int j=0;j<(width+1);j++){
  157.             paint[(width+1)*i+j]=false;
  158.         }}
  159.     }
  160. }
  161.  
  162.  
  163.